<html>
  <head>
    <title>
      RabbitMQ集成
    </title>
  </head>
  <body>
    <script>
      // 分布式事件总线  RabbitMQ集成

      /*
          本文档解释了如何将RabbitMQ配置为分布式事件总线提供程序。\

          请参阅分布式事件总线文档以了解如何使用分布式事件总线系统
      */

      /*
          一、安装


                1、使用 Abp  Cli 安装
                    使用ABP CLI将 "Volo. Abp.EventBus.RabbitMQ"  NuGet包添加到你的项目中:

                        在.csproj文件目录中打开命令行（终端），你要添加 "Volo.Abp.EventBus.RabbitMQ "  包。

                        运行 "abp add-package Volo.Abp.EventBus.RabbitMQ" 命令。

                2、手动安装、

                        如果你想手动执行此操作，请将 "Voo. Abp.EventBus.RabbitMQ "NuGet包安装到你的项目中，
                        
                        并将[DependsOn(typeof(AbpEventBusRabbitMqModule))]添加到项目内的ABP模块类中。
      */

      /*
          二、配置  

                  你可以使用标准配置系统进行配置，例如使用 appsettings.json文件，或使用选项类：
                  
                  
                  1、appsettings.json文件配置：

                        这是配置RabbitMQ设置的最简单方法。
                        
                        它也非常强大，因为你可以使用AspNet Core支持的任何其他配置源（如环境变量）。

                         eg: 使用默认配置连接到本地RabbitMQ服务器的最小配置

                              {
                                "RabbitMQ": {
                                  "EventBus": {
                                    "ClientName": "MyClientName",
                                    "ExchangeName": "MyExchangeName"
                                  }
                                }
                              }

                              ClientName是此应用程序的名称，用作RabbitMQ上的队列名称。

                              ExchangeName是交换名称。

                              请参阅RabbitMQ文档以更好地理解这些选项

                        ★、Connection 连接

                              如果需要连接到localhost以外的另一台服务器，则需要配置连接属性。

                              eg:  指定主机名 (作为IP地址)

                                    {
                                      "RabbitMQ": {
                                        "Connections": {
                                          "Default": {
                                            "HostName": "123.123.123.123"
                                          }
                                        },
                                        "EventBus": {
                                          "ClientName": "MyClientName",
                                          "ExchangeName": "MyExchangeName"
                                        }
                                      }
                                    }

                              允许定义多个连接。 在这种情况下，你可以指定用于事件总线的连接。

                              eg:   声明两个连接并将其中一个用于事件总线

                                    {
                                      "RabbitMQ": {
                                        "Connections": {
                                          "Default": {
                                            "HostName": "123.123.123.123"
                                          },
                                          "SecondConnection": {
                                            "HostName": "321.321.321.321"
                                          }
                                        },
                                        "EventBus": {
                                          "ClientName": "MyClientName",
                                          "ExchangeName": "MyExchangeName",
                                          "ConnectionName": "SecondConnection"
                                        }
                                      }
                                    }

                              这允许你在应用程序中使用多个RabbitMQ服务器，但为事件总线玄奇其中一个。

                              你可以使用任何ConnectionFactory 属性作为连接属性。

                                    eg:  指定连接端口

                                            {
                                              "RabbitMQ": {
                                                "Connections": {
                                                  "Default": {
                                                    "HostName": "123.123.123.123",
                                                    "Port": "5672"
                                                  }
                                                }
                                              }
                                            }

                              如果需要连接RabbitMQ集群，可以使用;字符分隔主机名。


                                      eg: 连接到RabbitMQ集群

                                            {
                                              "RabbitMQ": {
                                                "Connections": {
                                                  "Default": {
                                                    "HostName": "123.123.123.123;234.234.234.234"
                                                  }
                                                },
                                                "EventBus": {
                                                  "ClientName": "MyClientName",
                                                  "ExchangeName": "MyExchangeName"
                                                }
                                              }
                                            }


                2、选项类、

                        AbpRabbitMqOptions  和  AbpRabbitMqEventBusOptions 类可用于配置RabbitMQ的连接字符串和事件总线选项。

                        你可以在模板的 ConfigureServices中配置此选型。

                                eg: 配置连接

                                        Configure<AbpRabbitMqOptions>(options =>
                                        {
                                            options.Connections.Default.UserName = "user";
                                            options.Connections.Default.Password = "pass";
                                            options.Connections.Default.HostName = "123.123.123.123";
                                            options.Connections.Default.Port = 5672;
                                        });    
                                        
                                eg: 配置客户端、交换名 和 prefetchCount

                                        Configure<AbpRabbitMqEventBusOptions>(options =>
                                        {
                                            options.ClientName = "TestApp1";
                                            options.ExchangeName = "TestMessages";
                                            options.PrefetchCount = 1;
                                        });

                                eg:  配置队列并交换可选参数：
                                        Configure<AbpRabbitMqEventBusOptions>(options =>
                                        {
                                            options.ExchangeArguments["x-delayed-type"] = "direct";
                                            options.QueueArguments["x-message-ttl"] = 60000;
                                        });


                        使用这些选项类可以与appsettings.json方式结合使用。在代码中配置选项属性会覆盖配置文件中的值。
                                                                                
      */
    </script>
  </body>
</html>